import { defineStore } from 'pinia'
import { ref } from 'vue'
import { getUserInfo } from '@/api/admin/user'
import { getCurrentUserProfile } from '@/api/frontend/user'
import { removeToken } from '@/composables/cookie'

export const useUserStore = defineStore('user', () => {
  // 用户信息
  const userInfo = ref({})

  // 设置用户信息（后台管理）
  async function setUserInfo() {
    try {
      // 调用后台获取用户信息接口
      const res = await getUserInfo()
      if (res.success == true) {
        userInfo.value = res.data
      }
    } catch (error) {
      console.error('获取后台用户信息失败:', error)
    }
  }

  // 设置用户信息（前台）
  async function setUserInfoForFrontend() {
    try {
      // 调用前台获取用户信息接口
      const res = await getCurrentUserProfile()
      if (res.success == true) {
        // 将前台用户信息格式转换为与后台一致的格式
        userInfo.value = {
          username: res.data.username,
          role: res.data.role || 'ROLE_VISITOR', // 现在前台API也会返回role字段
          nickname: res.data.nickname,
          avatar: res.data.avatar,
          bio: res.data.bio,
          email: res.data.email
        }
      } else {
        console.log('获取前台用户信息失败:', res.message)
        // API返回失败但不清空用户信息，可能只是前台特定的权限问题
      }
    } catch (error) {
      console.error('获取前台用户信息失败:', error)
      // 网络错误等异常情况才清空用户信息
      if (error.response && error.response.status === 401) {
        // 只有401认证失败时才清空用户信息
        userInfo.value = {}
      }
    }
  }

  // 智能设置用户信息（根据当前路径判断使用哪个API）
  async function setUserInfoSmart() {
    const currentPath = window.location.pathname
    if (currentPath.startsWith('/admin')) {
      // 后台管理页面使用后台API
      await setUserInfo()
    } else {
      // 前台页面使用前台API
      await setUserInfoForFrontend()
    }
  }

  // 退出登录
  function logout() {
    // 删除 cookie 中的 token 令牌
    removeToken()
    // 删除登录用户信息
    userInfo.value = {}
  }

  return { userInfo, setUserInfo, setUserInfoForFrontend, setUserInfoSmart, logout }
}, 
{
  // 开启持久化
  persist: true,
}
)